package com.yinxin.wudasuanfa.huaweiod;

import java.util.ArrayList;
import java.util.List;

/**
 * @author yinxin
 * @version 1.0
 * @Description:
 * @date 2022/4/2614:07
 */
public class Exercise1 {
    public static void main(String[] args) {
        int[] arr =new int[]{3,6,9,5,15,2};
        boolean flag = myFunc(arr);
        System.out.println(flag);
    }

    /**
     * 编写一个函数传入一个int型数组，是的两组中各元素加起来相等，并且，所有5的倍数必须在其中一个组中，所有3的倍数在另一个组中（不包括5的倍数），
     * 能满足以上条件；返回true；不满足返回false
     * @return
     */
    public static boolean myFunc(int[] arr){
        int five = 0;
        int three = 0;
        List<Integer> lastList = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]%5==0){
                five+=arr[i];
            }else if(arr[i]%3==0){
                three+=arr[i];
            }else {
                lastList.add(arr[i]);
            }
        }
        int difference =five-three;//3的倍数和5的倍数的数分组后的差
        List<Integer> defList = new ArrayList<>();
        defList.add(0);
        //这样可以求出所有的除3和5倍数之外的所有的数的加减运算后的结果
        for (Integer integer : lastList) {
            defList=getArray(defList,integer);
        }
        for (Integer sum : defList) {
            if(sum==difference||sum==difference*(-1)){
                return true;
            }
        }

        return false;
    }

    public static List getArray(List<Integer> defList,int integer){
        List<Integer> endList = new ArrayList<>();
        for (Integer inte : defList) {
            endList.add(inte+integer);
            endList.add(inte-integer);
        }
        return endList;
    }
}
